package com.sxj.corejava.code06_lambda表达式;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.function.Function;

/**
 * @author 石小俊
 * @date 2023年12月2023/12/23日 8:48
 */
public class Test05_函数型接口 {

    public static void main(String[] args) {
        // 匿名内部类用法
        List list = Arrays.asList("南京", "苏州", "无锡", "常州", "泰州", "盐城", "徐州", "连云港", "扬州", "宿迁", "南通", "淮安", "镇江");
        Integer length = testFunction(new Function<List<String>, Integer>() {
            @Override
            public Integer apply(List<String> strings) {
                List<String> l = new ArrayList<>();
                for(String city : strings){
                    if(city.contains("州")){
                        l.add(city);
                    }
                }
                return l.size();
            }
        },list);
        System.out.println("集合长度为:"+length);

        // Lambda表达式用法
        length = testFunction(l -> l.size(),list);
        System.out.println("集合长度为:"+length);
    }

    /**
     * 函数型接口方法:R apply(T t)
     * 其泛型的第一个参数类型与方法的参数类型一致
     * 其泛型的第二个参数类型与方法的返回值类型一致
     * @param function
     * @param list
     * @return
     */
    public static Integer testFunction(Function<List<String>,Integer> function,List<String> list){
        return function.apply(list);
    }

}
